МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Інститут комп’ютерних технологій, автоматики та метрології
Кафедра автоматики та телемеханіки
Курсова робота
з курсу: „Методи та засоби криптографічних перетворень”
на тему: “Симетричні та асиметричні методи зашифрування інформації”
Львів – 2005
Зміст
Завдання 1
Теоретичні відомості
Блок-схема алгоритму
Список ідентифікаторів
Текст програми
Відкритий текст
Результат зашифрування
Висновки
Завдання 2
Теоретичні відомості
Вибір ключів
Зашифрування
Розшифрування
Висновки
Завдання 1
Вибрати ключі та розробити програму для за шифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою i НЗК. Об‘єм алфавіту визначається передостанньою цифрою j НЗК і дорівнює при і .
I
i mod 6
Тип афінного шифру
6
0
Зсув 1-го порядку
j
Розрядність алфавіту
Об‘єм алфавіту
7
12
4096
Теоретичні відомості
символьний алфавіт ототожнюємо з кільцем . А саме, кожна буква змінюється своїм номером у алфавіті, причому нумерація починається з нуля. Наприклад, латинська абетка утотожнюється, а українська із . Літера а української абетки трактується як 0, б як 1, і т. д. Тепер до букв відкритого тексту ми можемо вільно застосовувати операції додавання, множення за відповідним модулем.
Шифр зсуву.
Ключ: таке, що .
Шифрування: у повідомленні кожна буква заміщується буквою .
дешифрування: У криптотексті кожна буква заміщується буквою , де . Величину зворотнього зсуву будемо називати дешифруючим ключем.
Блок-схема прорами
Текст програми
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
unsigned long a=123, n=4096;
const bit_mask = 12;
const mask = pow(2, bit_mask)-1;
void main(void)
{
char s[6];
FILE *f_in, *f_out;
int end_of_in_file=0, x_is_ready=1;
unsigned long buf_in, buf_out = 0, x;
int in_bits=32, out_cells=32;
if ( (f_in=fopen("data.in", "rb")) == NULL )
{
printf("cannot open the file data.in");
getch();
exit(1);
}
else
if ( (f_out=fopen("data.out", "wb")) == NULL)
{
printf("cannot open the file data.out or data_out.txt");
getch();
exit(1);
}
else
{
if (fread(&buf_in, 1, 4, f_in) != 0)
while (!end_of_in_file)
{
if (in_bits<=0)
{
if (fread(&buf_in, 1, 4, f_in) != 0)
{
x |= (buf_in << (bit_mask+in_bits)) & mask;
buf_in >>= (-in_bits);
in_bits += 32;
x_is_ready = 1 & !(in_bits==32);
}
else
{
end_of_in_file = 1;
x_is_ready = 1;
}
}
else
{
x = buf_in & mask;
buf_in >>= bit_mask;
in_bits -= bit_mask;
x_is_ready = 1 & (in_bits>=0);
}
/*--------------------------------*/
if (x_is_ready)
{
x = (unsigned int)(fmod(a+x, n));
itoa(x, s, 10);
printf("%s", strcat(s, " "));
buf_out |= x << (32-out_cells);
out_cells -= bit_mask;
if (out_cells<=0)
{
fwrite(&buf_out, 4, 1, f_out);
buf_out &= 0;
if (out_cells==0) out_cells = 32;
else
{
buf_out |= x >> (bit_mask+out_cells);
out_cells += 32;
}
}
}
}
fcloseall();
printf("\nReady. Press any key.");
getch();
}
}
Список ідентифікаторів
Ідентифікатори
Призначення
unsigned long a=123
Ключ
unsigned long n=4096
Розмір алфавіту
FILE *f_in
Вхідний файл
FILE *f_out
Зашифрований файл
int end_of_in_file=0
Прапорець кінця файлу
int x_is_ready=1
Прапорець готовності символа
unsigned long buf_in
Вхідний буфер (32 біти)
unsigned long buf_out = 0
Вихідний буфер (32 біти)
unsigned long x
Проміжний символ (9 біт)
int in_bits=32
Лічильник непрочитаних бітів вхідного буфера
int out_cells =32
Лічильник незаповнених бітів вихідного буфера
Текст вхідного повідомлення
Методи чисельного розв‘язування систем лінійних рівнянь поділяються на дві групи:
1) „точні” (прямі) методи, які дозволяють одержати розв‘язок, якщо він існує, як скінченну...